package com.ruoyi.system.mapper;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.ruoyi.system.domain.TbTask;
import com.ruoyi.system.domain.vo.TbTaskResultVO;
import com.ruoyi.system.domain.vo.TbTaskVO;
import org.apache.ibatis.annotations.Param;

/**
 * 推送任务Mapper接口
 * 
 * @author ruoyi
 * @date 2025-07-23
 */
public interface TbTaskMapper 
{
    /**
     * 查询推送任务
     * 
     * @param id 推送任务主键
     * @return 推送任务
     */
    public TbTask selectTbTaskById(Long id);

    /**
     * 查询推送任务列表
     * 
     * @param tbTask 推送任务
     * @return 推送任务集合
     */
    public List<TbTask> selectTbTaskList(TbTask tbTask);

    /**
     * 新增推送任务
     * 
     * @param tbTask 推送任务
     * @return 结果
     */
    public int insertTbTask(TbTask tbTask);

    /**
     * 修改推送任务
     * 
     * @param tbTask 推送任务
     * @return 结果
     */
    public int updateTbTask(TbTask tbTask);

    /**
     * 删除推送任务
     * 
     * @param id 推送任务主键
     * @return 结果
     */
    public int deleteTbTaskById(Long id);

    /**
     * 批量删除推送任务
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTbTaskByIds(Long[] ids);

    List<TbTask> selectTaskListByIds(@Param("list") List<Long> longs);

    List<TbTaskResultVO> selectTbTaskLists (@Param("taskName") String taskName, @Param("taskStatus") Integer taskStatus
            , @Param("registrationTimeBegin") Date registrationTimeBegin, @Param("registrationTimeEnd") Date registrationTimeEnd);

    List<TbTask> selectTaskDetail(@Param("startTime") LocalDate startDate, @Param("endTime") LocalDate endDate, @Param("planeCode") String  planeCode);

    void updateTaskProgress(@Param("taskId") Long taskId, @Param("overallProgress") Double overallProgress);

    void updateTaskStatus(@Param("taskId") Long taskId, @Param("status") int i);

    void updateTaskStopTime(@Param("taskId") Long taskId, @Param("stopTime") Date date);

    List<TbTask> selectTasksByIds(@Param("list") List<Long> longs);

    List<TbTask> selectTasksByDateRange(@Param("startTime") LocalDateTime startDate, @Param("endTime") LocalDateTime endDate
            , @Param("planeCode") String planeCode);

    Long selectTbTaskCount(@Param("taskName") String taskName, @Param("taskStatus") Integer taskStatus, @Param("registrationTimeBegin") Date registrationTimeBegin, @Param("registrationTimeEnd") Date registrationTimeEnd);


}
